#批量转换视频
from pathlib import Path
from ffmpy import FFmpeg
import logging
logger = logging.getLogger(__name__)

def video_coding(fp, tf=None):
    """批量转换视频格式"""
    file = Path(fp)
    
    # 检查输入文件或目录是否存在
    if not file.exists():
        logger.error(f"输入: {file} ---文件或目录不存在")
        return
    
    # 如果是目录，设置目标文件夹
    if file.is_dir():
        if not tf:
            tf = file  # 将目标文件夹设置为当前路径
    else:
        if not tf:
            tf = file.parent  # 将目标文件夹设置为文件的父目录

    tf = Path(tf)
    # 确保目标文件夹存在     
    tf.mkdir(parents=True, exist_ok=True)

    supported_formats = ['.mp4', '.mkv', '.avi', '.flv', '.mov', '.ts']
    
    # 使用 rglob('*') 遍历目录及其子目录中的所有文件,iterdir() 仅遍历当前目录下所有文件
    for subpath in file.rglob('*'):
        if subpath.suffix not in supported_formats:
            continue  # 忽略不支持的格式
        
        output_path = tf / f"{subpath.stem}_To{subpath.suffix}"  # 输出文件名，指定为 mp4 格式
        
        try:
            ff = FFmpeg(
                inputs={str(subpath): f'-hwaccel d3d11va'},
                outputs={str(output_path): f'-c:v h264_qsv -g 26 -y'}
            )
            ff.run()
            logger.info(f"成功转换: {subpath} => {output_path}")
        except Exception as e:
            logger.error(f"转换 {subpath} 时出错: {e}")

if __name__ == '__main__':
    filepath = r"D:\Documents\videos\temp"
    target_folder = r""
    video_coding(filepath, target_folder)
